const fs = require('fs');
const path = require('path');

/**
 * 监视指定地址下文件变化的函数
 * @param {string} dirPath 监视的地址，可以是相对路径或绝对路径
 * @param {number} timeout 超时时间，单位为毫秒
 * @param {function} callback 回调函数，当文件变化时调用，参数为null
 */
function watchFileChange(dirPath, timeout, callback) {
    // 将地址转为绝对路径
    dirPath = path.resolve(dirPath);

    // 创建一个文件变化监视器
    const watcher = fs.watch(dirPath, { recursive: true }, (eventType, filename) => {
        // 只处理修改或添加事件
        if (eventType === 'change' || eventType === 'rename') {
            // 如果有文件变化，解除监视器并调用回调函数
            watcher.close();
            callback(null);
        }
    });

    // 设置超时定时器，超时后解除监视器并调用回调函数
    setTimeout(() => {
        watcher.close();
        callback(new Error('Timeout'));
    }, timeout);
}

// 使用示例
watchFileChange('./test', 5000, (err) => {
    if (err) {
        console.error(err);
    } else {
        console.log('文件变化了！');
    }
});


module.exports = {
    watchFileChange
};

